1   /*
2    * Copyright (c) 1995, 2002, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  package java.awt;
26  
27  import java.awt.event.*;
28  import java.io.*;
29  
30  /**
31   * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
32   * available only for backwards compatilibility.  It has been replaced
33   * by the <code>AWTEvent</code> class and its subclasses.
34   * <p>
35   * <code>Event</code> is a platform-independent class that
36   * encapsulates events from the platform's Graphical User
37   * Interface in the Java&nbsp;1.0 event model. In Java&nbsp;1.1
38   * and later versions, the <code>Event</code> class is maintained
39   * only for backwards compatibilty. The information in this
40   * class description is provided to assist programmers in
41   * converting Java&nbsp;1.0 programs to the new event model.
42   * <p>
43   * In the Java&nbsp;1.0 event model, an event contains an
44   * {@link Event#id} field
45   * that indicates what type of event it is and which other
46   * <code>Event</code> variables are relevant for the event.
47   * <p>
48   * For keyboard events, {@link Event#key}
49   * contains a value indicating which key was activated, and
50   * {@link Event#modifiers} contains the
51   * modifiers for that event.  For the KEY_PRESS and KEY_RELEASE
52   * event ids, the value of <code>key</code> is the unicode
53   * character code for the key. For KEY_ACTION and
54   * KEY_ACTION_RELEASE, the value of <code>key</code> is
55   * one of the defined action-key identifiers in the
56   * <code>Event</code> class (<code>PGUP</code>,
57   * <code>PGDN</code>, <code>F1</code>, <code>F2</code>, etc).
58   *
59   * @author     Sami Shaio
60   * @since      JDK1.0
61   */
62  public class Event implements java.io.Serializable {
63      private transient long data;
64  
65      /* Modifier constants */
66  
67      /**
68       * This flag indicates that the Shift key was down when the event
69       * occurred.
70       */
71      public static final int SHIFT_MASK          = 1 << 0;
72  
73      /**
74       * This flag indicates that the Control key was down when the event
75       * occurred.
76       */
77      public static final int CTRL_MASK           = 1 << 1;
78  
79      /**
80       * This flag indicates that the Meta key was down when the event
81       * occurred. For mouse events, this flag indicates that the right
82       * button was pressed or released.
83       */
84      public static final int META_MASK           = 1 << 2;
85  
86      /**
87       * This flag indicates that the Alt key was down when
88       * the event occurred. For mouse events, this flag indicates that the
89       * middle mouse button was pressed or released.
90       */
91      public static final int ALT_MASK            = 1 << 3;
92  
93      /* Action keys */
94  
95      /**
96       * The Home key, a non-ASCII action key.
97       */
98      public static final int HOME                = 1000;
99  
100     /**
101      * The End key, a non-ASCII action key.
102      */
103     public static final int END                 = 1001;
104 
105     /**
106      * The Page Up key, a non-ASCII action key.
107      */
108     public static final int PGUP                = 1002;
109 
110     /**
111      * The Page Down key, a non-ASCII action key.
112      */
113     public static final int PGDN                = 1003;
114 
115     /**
116      * The Up Arrow key, a non-ASCII action key.
117      */
118     public static final int UP                  = 1004;
119 
120     /**
121      * The Down Arrow key, a non-ASCII action key.
122      */
123     public static final int DOWN                = 1005;
124 
125     /**
126      * The Left Arrow key, a non-ASCII action key.
127      */
128     public static final int LEFT                = 1006;
129 
130     /**
131      * The Right Arrow key, a non-ASCII action key.
132      */
133     public static final int RIGHT               = 1007;
134 
135     /**
136      * The F1 function key, a non-ASCII action key.
137      */
138     public static final int F1                  = 1008;
139 
140     /**
141      * The F2 function key, a non-ASCII action key.
142      */
143     public static final int F2                  = 1009;
144 
145     /**
146      * The F3 function key, a non-ASCII action key.
147      */
148     public static final int F3                  = 1010;
149 
150     /**
151      * The F4 function key, a non-ASCII action key.
152      */
153     public static final int F4                  = 1011;
154 
155     /**
156      * The F5 function key, a non-ASCII action key.
157      */
158     public static final int F5                  = 1012;
159 
160     /**
161      * The F6 function key, a non-ASCII action key.
162      */
163     public static final int F6                  = 1013;
164 
165     /**
166      * The F7 function key, a non-ASCII action key.
167      */
168     public static final int F7                  = 1014;
169 
170     /**
171      * The F8 function key, a non-ASCII action key.
172      */
173     public static final int F8                  = 1015;
174 
175     /**
176      * The F9 function key, a non-ASCII action key.
177      */
178     public static final int F9                  = 1016;
179 
180     /**
181      * The F10 function key, a non-ASCII action key.
182      */
183     public static final int F10                 = 1017;
184 
185     /**
186      * The F11 function key, a non-ASCII action key.
187      */
188     public static final int F11                 = 1018;
189 
190     /**
191      * The F12 function key, a non-ASCII action key.
192      */
193     public static final int F12                 = 1019;
194 
195     /**
196      * The Print Screen key, a non-ASCII action key.
197      */
198     public static final int PRINT_SCREEN        = 1020;
199 
200     /**
201      * The Scroll Lock key, a non-ASCII action key.
202      */
203     public static final int SCROLL_LOCK         = 1021;
204 
205     /**
206      * The Caps Lock key, a non-ASCII action key.
207      */
208     public static final int CAPS_LOCK           = 1022;
209 
210     /**
211      * The Num Lock key, a non-ASCII action key.
212      */
213     public static final int NUM_LOCK            = 1023;
214 
215     /**
216      * The Pause key, a non-ASCII action key.
217      */
218     public static final int PAUSE               = 1024;
219 
220     /**
221      * The Insert key, a non-ASCII action key.
222      */
223     public static final int INSERT              = 1025;
224 
225     /* Non-action keys */
226 
227     /**
228      * The Enter key.
229      */
230     public static final int ENTER               = '\n';
231 
232     /**
233      * The BackSpace key.
234      */
235     public static final int BACK_SPACE          = '\b';
236 
237     /**
238      * The Tab key.
239      */
240     public static final int TAB                 = '\t';
241 
242     /**
243      * The Escape key.
244      */
245     public static final int ESCAPE              = 27;
246 
247     /**
248      * The Delete key.
249      */
250     public static final int DELETE              = 127;
251 
252 
253     /* Base for all window events. */
254     private static final int WINDOW_EVENT       = 200;
255 
256     /**
257      * The user has asked the window manager to kill the window.
258      */
259     public static final int WINDOW_DESTROY      = 1 + WINDOW_EVENT;
260 
261     /**
262      * The user has asked the window manager to expose the window.
263      */
264     public static final int WINDOW_EXPOSE       = 2 + WINDOW_EVENT;
265 
266     /**
267      * The user has asked the window manager to iconify the window.
268      */
269     public static final int WINDOW_ICONIFY      = 3 + WINDOW_EVENT;
270 
271     /**
272      * The user has asked the window manager to de-iconify the window.
273      */
274     public static final int WINDOW_DEICONIFY    = 4 + WINDOW_EVENT;
275 
276     /**
277      * The user has asked the window manager to move the window.
278      */
279     public static final int WINDOW_MOVED        = 5 + WINDOW_EVENT;
280 
281     /* Base for all keyboard events. */
282     private static final int KEY_EVENT          = 400;
283 
284     /**
285      * The user has pressed a normal key.
286      */
287     public static final int KEY_PRESS           = 1 + KEY_EVENT;
288 
289     /**
290      * The user has released a normal key.
291      */
292     public static final int KEY_RELEASE         = 2 + KEY_EVENT;
293 
294     /**
295      * The user has pressed a non-ASCII <em>action</em> key.
296      * The <code>key</code> field contains a value that indicates
297      * that the event occurred on one of the action keys, which
298      * comprise the 12 function keys, the arrow (cursor) keys,
299      * Page Up, Page Down, Home, End, Print Screen, Scroll Lock,
300      * Caps Lock, Num Lock, Pause, and Insert.
301      */
302     public static final int KEY_ACTION          = 3 + KEY_EVENT;
303 
304     /**
305      * The user has released a non-ASCII <em>action</em> key.
306      * The <code>key</code> field contains a value that indicates
307      * that the event occurred on one of the action keys, which
308      * comprise the 12 function keys, the arrow (cursor) keys,
309      * Page Up, Page Down, Home, End, Print Screen, Scroll Lock,
310      * Caps Lock, Num Lock, Pause, and Insert.
311      */
312     public static final int KEY_ACTION_RELEASE  = 4 + KEY_EVENT;
313 
314     /* Base for all mouse events. */
315     private static final int MOUSE_EVENT        = 500;
316 
317     /**
318      * The user has pressed the mouse button. The <code>ALT_MASK</code>
319      * flag indicates that the middle button has been pressed.
320      * The <code>META_MASK</code>flag indicates that the
321      * right button has been pressed.
322      * @see     java.awt.Event#ALT_MASK
323      * @see     java.awt.Event#META_MASK
324      */
325     public static final int MOUSE_DOWN          = 1 + MOUSE_EVENT;
326 
327     /**
328      * The user has released the mouse button. The <code>ALT_MASK</code>
329      * flag indicates that the middle button has been released.
330      * The <code>META_MASK</code>flag indicates that the
331      * right button has been released.
332      * @see     java.awt.Event#ALT_MASK
333      * @see     java.awt.Event#META_MASK
334      */
335     public static final int MOUSE_UP            = 2 + MOUSE_EVENT;
336 
337     /**
338      * The mouse has moved with no button pressed.
339      */
340     public static final int MOUSE_MOVE          = 3 + MOUSE_EVENT;
341 
342     /**
343      * The mouse has entered a component.
344      */
345     public static final int MOUSE_ENTER         = 4 + MOUSE_EVENT;
346 
347     /**
348      * The mouse has exited a component.
349      */
350     public static final int MOUSE_EXIT          = 5 + MOUSE_EVENT;
351 
352     /**
353      * The user has moved the mouse with a button pressed. The
354      * <code>ALT_MASK</code> flag indicates that the middle
355      * button is being pressed. The <code>META_MASK</code> flag indicates
356      * that the right button is being pressed.
357      * @see     java.awt.Event#ALT_MASK
358      * @see     java.awt.Event#META_MASK
359      */
360     public static final int MOUSE_DRAG          = 6 + MOUSE_EVENT;
361 
362 
363     /* Scrolling events */
364     private static final int SCROLL_EVENT       = 600;
365 
366     /**
367      * The user has activated the <em>line up</em>
368      * area of a scroll bar.
369      */
370     public static final int SCROLL_LINE_UP      = 1 + SCROLL_EVENT;
371 
372     /**
373      * The user has activated the <em>line down</em>
374      * area of a scroll bar.
375      */
376     public static final int SCROLL_LINE_DOWN    = 2 + SCROLL_EVENT;
377 
378     /**
379      * The user has activated the <em>page up</em>
380      * area of a scroll bar.
381      */
382     public static final int SCROLL_PAGE_UP      = 3 + SCROLL_EVENT;
383 
384     /**
385      * The user has activated the <em>page down</em>
386      * area of a scroll bar.
387      */
388     public static final int SCROLL_PAGE_DOWN    = 4 + SCROLL_EVENT;
389 
390     /**
391      * The user has moved the bubble (thumb) in a scroll bar,
392      * moving to an "absolute" position, rather than to
393      * an offset from the last postion.
394      */
395     public static final int SCROLL_ABSOLUTE     = 5 + SCROLL_EVENT;
396 
397     /**
398      * The scroll begin event.
399      */
400     public static final int SCROLL_BEGIN        = 6 + SCROLL_EVENT;
401 
402     /**
403      * The scroll end event.
404      */
405     public static final int SCROLL_END          = 7 + SCROLL_EVENT;
406 
407     /* List Events */
408     private static final int LIST_EVENT         = 700;
409 
410     /**
411      * An item in a list has been selected.
412      */
413     public static final int LIST_SELECT         = 1 + LIST_EVENT;
414 
415     /**
416      * An item in a list has been deselected.
417      */
418     public static final int LIST_DESELECT       = 2 + LIST_EVENT;
419 
420     /* Misc Event */
421     private static final int MISC_EVENT         = 1000;
422 
423     /**
424      * This event indicates that the user wants some action to occur.
425      */
426     public static final int ACTION_EVENT        = 1 + MISC_EVENT;
427 
428     /**
429      * A file loading event.
430      */
431     public static final int LOAD_FILE           = 2 + MISC_EVENT;
432 
433     /**
434      * A file saving event.
435      */
436     public static final int SAVE_FILE           = 3 + MISC_EVENT;
437 
438     /**
439      * A component gained the focus.
440      */
441     public static final int GOT_FOCUS           = 4 + MISC_EVENT;
442 
443     /**
444      * A component lost the focus.
445      */
446     public static final int LOST_FOCUS          = 5 + MISC_EVENT;
447 
448     /**
449      * The target component. This indicates the component over which the
450      * event occurred or with which the event is associated.
451      * This object has been replaced by AWTEvent.getSource()
452      *
453      * @serial
454      * @see java.awt.AWTEvent#getSource()
455      */
456     public Object target;
457 
458     /**
459      * The time stamp.
460      * Replaced by InputEvent.getWhen().
461      *
462      * @serial
463      * @see java.awt.event.InputEvent#getWhen()
464      */
465     public long when;
466 
467     /**
468      * Indicates which type of event the event is, and which
469      * other <code>Event</code> variables are relevant for the event.
470      * This has been replaced by AWTEvent.getID()
471      *
472      * @serial
473      * @see java.awt.AWTEvent#getID()
474      */
475     public int id;
476 
477     /**
478      * The <i>x</i> coordinate of the event.
479      * Replaced by MouseEvent.getX()
480      *
481      * @serial
482      * @see java.awt.event.MouseEvent#getX()
483      */
484     public int x;
485 
486     /**
487      * The <i>y</i> coordinate of the event.
488      * Replaced by MouseEvent.getY()
489      *
490      * @serial
491      * @see java.awt.event.MouseEvent#getY()
492      */
493     public int y;
494 
495     /**
496      * The key code of the key that was pressed in a keyboard event.
497      * This has been replaced by KeyEvent.getKeyCode()
498      *
499      * @serial
500      * @see java.awt.event.KeyEvent#getKeyCode()
501      */
502     public int key;
503 
504     /**
505      * The key character that was pressed in a keyboard event.
506      */
507 //    public char keyChar;
508 
509     /**
510      * The state of the modifier keys.
511      * This is replaced with InputEvent.getModifiers()
512      * In java 1.1 MouseEvent and KeyEvent are subclasses
513      * of InputEvent.
514      *
515      * @serial
516      * @see java.awt.event.InputEvent#getModifiers()
517      */
518     public int modifiers;
519 
520     /**
521      * For <code>MOUSE_DOWN</code> events, this field indicates the
522      * number of consecutive clicks. For other events, its value is
523      * <code>0</code>.
524      * This field has been replaced by MouseEvent.getClickCount().
525      *
526      * @serial
527      * @see java.awt.event.MouseEvent#getClickCount().
528      */
529     public int clickCount;
530 
531     /**
532      * An arbitrary argument of the event. The value of this field
533      * depends on the type of event.
534      * <code>arg</code> has been replaced by event specific property.
535      *
536      * @serial
537      */
538     public Object arg;
539 
540     /**
541      * The next event. This field is set when putting events into a
542      * linked list.
543      * This has been replaced by EventQueue.
544      *
545      * @serial
546      * @see java.awt.EventQueue
547      */
548     public Event evt;
549 
550     /* table for mapping old Event action keys to KeyEvent virtual keys. */
551     private static final int actionKeyCodes[][] = {
552     /*    virtual key              action key   */
553         { KeyEvent.VK_HOME,        Event.HOME         },
554         { KeyEvent.VK_END,         Event.END          },
555         { KeyEvent.VK_PAGE_UP,     Event.PGUP         },
556         { KeyEvent.VK_PAGE_DOWN,   Event.PGDN         },
557         { KeyEvent.VK_UP,          Event.UP           },
558         { KeyEvent.VK_DOWN,        Event.DOWN         },
559         { KeyEvent.VK_LEFT,        Event.LEFT         },
560         { KeyEvent.VK_RIGHT,       Event.RIGHT        },
561         { KeyEvent.VK_F1,          Event.F1           },
562         { KeyEvent.VK_F2,          Event.F2           },
563         { KeyEvent.VK_F3,          Event.F3           },
564         { KeyEvent.VK_F4,          Event.F4           },
565         { KeyEvent.VK_F5,          Event.F5           },
566         { KeyEvent.VK_F6,          Event.F6           },
567         { KeyEvent.VK_F7,          Event.F7           },
568         { KeyEvent.VK_F8,          Event.F8           },
569         { KeyEvent.VK_F9,          Event.F9           },
570         { KeyEvent.VK_F10,         Event.F10          },
571         { KeyEvent.VK_F11,         Event.F11          },
572         { KeyEvent.VK_F12,         Event.F12          },
573         { KeyEvent.VK_PRINTSCREEN, Event.PRINT_SCREEN },
574         { KeyEvent.VK_SCROLL_LOCK, Event.SCROLL_LOCK  },
575         { KeyEvent.VK_CAPS_LOCK,   Event.CAPS_LOCK    },
576         { KeyEvent.VK_NUM_LOCK,    Event.NUM_LOCK     },
577         { KeyEvent.VK_PAUSE,       Event.PAUSE        },
578         { KeyEvent.VK_INSERT,      Event.INSERT       }
579     };
580 
581     /**
582      * This field controls whether or not the event is sent back
583      * down to the peer once the target has processed it -
584      * false means it's sent to the peer, true means it's not.
585      *
586      * @serial
587      * @see #isConsumed()
588      */
589     private boolean consumed = false;
590 
591     /*
592      * JDK 1.1 serialVersionUID
593      */
594     private static final long serialVersionUID = 5488922509400504703L;
595 
596     static {
597         /* ensure that the necessary native libraries are loaded */
598         Toolkit.loadLibraries();
599         if (!GraphicsEnvironment.isHeadless()) {
600             initIDs();
601         }
602     }
603 
604     /**
605      * Initialize JNI field and method IDs for fields that may be
606        accessed from C.
607      */
608     private static native void initIDs();
609 
610     /**
611      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
612      * available only for backwards compatilibility.  It has been replaced
613      * by the <code>AWTEvent</code> class and its subclasses.
614      * <p>
615      * Creates an instance of <code>Event</code> with the specified target
616      * component, time stamp, event type, <i>x</i> and <i>y</i>
617      * coordinates, keyboard key, state of the modifier keys, and
618      * argument.
619      * @param     target     the target component.
620      * @param     when       the time stamp.
621      * @param     id         the event type.
622      * @param     x          the <i>x</i> coordinate.
623      * @param     y          the <i>y</i> coordinate.
624      * @param     key        the key pressed in a keyboard event.
625      * @param     modifiers  the state of the modifier keys.
626      * @param     arg        the specified argument.
627      */
628     public Event(Object target, long when, int id, int x, int y, int key,
629                  int modifiers, Object arg) {
630         this.target = target;
631         this.when = when;
632         this.id = id;
633         this.x = x;
634         this.y = y;
635         this.key = key;
636         this.modifiers = modifiers;
637         this.arg = arg;
638         this.data = 0;
639         this.clickCount = 0;
640         switch(id) {
641           case ACTION_EVENT:
642           case WINDOW_DESTROY:
643           case WINDOW_ICONIFY:
644           case WINDOW_DEICONIFY:
645           case WINDOW_MOVED:
646           case SCROLL_LINE_UP:
647           case SCROLL_LINE_DOWN:
648           case SCROLL_PAGE_UP:
649           case SCROLL_PAGE_DOWN:
650           case SCROLL_ABSOLUTE:
651           case SCROLL_BEGIN:
652           case SCROLL_END:
653           case LIST_SELECT:
654           case LIST_DESELECT:
655             consumed = true; // these types are not passed back to peer
656             break;
657           default:
658         }
659     }
660 
661     /**
662      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
663      * available only for backwards compatilibility.  It has been replaced
664      * by the <code>AWTEvent</code> class and its subclasses.
665      * <p>
666      * Creates an instance of <code>Event</code>, with the specified target
667      * component, time stamp, event type, <i>x</i> and <i>y</i>
668      * coordinates, keyboard key, state of the modifier keys, and an
669      * argument set to <code>null</code>.
670      * @param     target     the target component.
671      * @param     when       the time stamp.
672      * @param     id         the event type.
673      * @param     x          the <i>x</i> coordinate.
674      * @param     y          the <i>y</i> coordinate.
675      * @param     key        the key pressed in a keyboard event.
676      * @param     modifiers  the state of the modifier keys.
677      */
678     public Event(Object target, long when, int id, int x, int y, int key, int modifiers) {
679         this(target, when, id, x, y, key, modifiers, null);
680     }
681 
682     /**
683      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
684      * available only for backwards compatilibility.  It has been replaced
685      * by the <code>AWTEvent</code> class and its subclasses.
686      * <p>
687      * Creates an instance of <code>Event</code> with the specified
688      * target component, event type, and argument.
689      * @param     target     the target component.
690      * @param     id         the event type.
691      * @param     arg        the specified argument.
692      */
693     public Event(Object target, int id, Object arg) {
694         this(target, 0, id, 0, 0, 0, 0, arg);
695     }
696 
697     /**
698      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
699      * available only for backwards compatilibility.  It has been replaced
700      * by the <code>AWTEvent</code> class and its subclasses.
701      * <p>
702      * Translates this event so that its <i>x</i> and <i>y</i>
703      * coordinates are increased by <i>dx</i> and <i>dy</i>,
704      * respectively.
705      * <p>
706      * This method translates an event relative to the given component.
707      * This involves, at a minimum, translating the coordinates into the
708      * local coordinate system of the given component. It may also involve
709      * translating a region in the case of an expose event.
710      * @param     dx     the distance to translate the <i>x</i> coordinate.
711      * @param     dy     the distance to translate the <i>y</i> coordinate.
712      */
713     public void translate(int dx, int dy) {
714         this.x += dx;
715         this.y += dy;
716     }
717 
718     /**
719      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
720      * available only for backwards compatilibility.  It has been replaced
721      * by the <code>AWTEvent</code> class and its subclasses.
722      * <p>
723      * Checks if the Shift key is down.
724      * @return    <code>true</code> if the key is down;
725      *            <code>false</code> otherwise.
726      * @see       java.awt.Event#modifiers
727      * @see       java.awt.Event#controlDown
728      * @see       java.awt.Event#metaDown
729      */
730     public boolean shiftDown() {
731         return (modifiers & SHIFT_MASK) != 0;
732     }
733 
734     /**
735      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
736      * available only for backwards compatilibility.  It has been replaced
737      * by the <code>AWTEvent</code> class and its subclasses.
738      * <p>
739      * Checks if the Control key is down.
740      * @return    <code>true</code> if the key is down;
741      *            <code>false</code> otherwise.
742      * @see       java.awt.Event#modifiers
743      * @see       java.awt.Event#shiftDown
744      * @see       java.awt.Event#metaDown
745      */
746     public boolean controlDown() {
747         return (modifiers & CTRL_MASK) != 0;
748     }
749 
750     /**
751      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
752      * available only for backwards compatilibility.  It has been replaced
753      * by the <code>AWTEvent</code> class and its subclasses.
754      * <p>
755      * Checks if the Meta key is down.
756      *
757      * @return    <code>true</code> if the key is down;
758      *            <code>false</code> otherwise.
759      * @see       java.awt.Event#modifiers
760      * @see       java.awt.Event#shiftDown
761      * @see       java.awt.Event#controlDown
762      */
763     public boolean metaDown() {
764         return (modifiers & META_MASK) != 0;
765     }
766 
767     /**
768      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
769      * available only for backwards compatilibility.  It has been replaced
770      * by the <code>AWTEvent</code> class and its subclasses.
771      */
772     void consume() {
773         switch(id) {
774           case KEY_PRESS:
775           case KEY_RELEASE:
776           case KEY_ACTION:
777           case KEY_ACTION_RELEASE:
778               consumed = true;
779               break;
780           default:
781               // event type cannot be consumed
782         }
783     }
784 
785     /**
786      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
787      * available only for backwards compatilibility.  It has been replaced
788      * by the <code>AWTEvent</code> class and its subclasses.
789      */
790     boolean isConsumed() {
791         return consumed;
792     }
793 
794     /*
795      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
796      * available only for backwards compatilibility.  It has been replaced
797      * by the <code>AWTEvent</code> class and its subclasses.
798      * <p>
799      * Returns the integer key-code associated with the key in this event,
800      * as described in java.awt.Event.
801      */
802     static int getOldEventKey(KeyEvent e) {
803         int keyCode = e.getKeyCode();
804         for (int i = 0; i < actionKeyCodes.length; i++) {
805             if (actionKeyCodes[i][0] == keyCode) {
806                 return actionKeyCodes[i][1];
807             }
808         }
809         return (int)e.getKeyChar();
810     }
811 
812     /*
813      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
814      * available only for backwards compatilibility.  It has been replaced
815      * by the <code>AWTEvent</code> class and its subclasses.
816      * <p>
817      * Returns a new KeyEvent char which corresponds to the int key
818      * of this old event.
819      */
820     char getKeyEventChar() {
821        for (int i = 0; i < actionKeyCodes.length; i++) {
822             if (actionKeyCodes[i][1] == key) {
823                 return KeyEvent.CHAR_UNDEFINED;
824             }
825        }
826        return (char)key;
827     }
828 
829     /**
830      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
831      * available only for backwards compatilibility.  It has been replaced
832      * by the <code>AWTEvent</code> class and its subclasses.
833      * <p>
834      * Returns a string representing the state of this <code>Event</code>.
835      * This method is intended to be used only for debugging purposes, and the
836      * content and format of the returned string may vary between
837      * implementations. The returned string may be empty but may not be
838      * <code>null</code>.
839      *
840      * @return    the parameter string of this event
841      */
842     protected String paramString() {
843         String str = "id=" + id + ",x=" + x + ",y=" + y;
844         if (key != 0) {
845             str += ",key=" + key;
846         }
847         if (shiftDown()) {
848             str += ",shift";
849         }
850         if (controlDown()) {
851             str += ",control";
852         }
853         if (metaDown()) {
854             str += ",meta";
855         }
856         if (target != null) {
857             str += ",target=" + target;
858         }
859         if (arg != null) {
860             str += ",arg=" + arg;
861         }
862         return str;
863     }
864 
865     /**
866      * <b>NOTE:</b> The <code>Event</code> class is obsolete and is
867      * available only for backwards compatilibility.  It has been replaced
868      * by the <code>AWTEvent</code> class and its subclasses.
869      * <p>
870      * Returns a representation of this event's values as a string.
871      * @return    a string that represents the event and the values
872      *                 of its member fields.
873      * @see       java.awt.Event#paramString
874      * @since     JDK1.1
875      */
876     public String toString() {
877         return getClass().getName() + "[" + paramString() + "]";
878     }
879 }